/*
作者：dan
说明：输入参数－file从文件读取用户名，－database从数据库读取，－standard从标准输入读取，－http从http 接口读取。
*/

/*
搜索发现c++集合从c++11开始支持初始化列表的方式初始化。
http://www.cplusplus.com/reference/set/set/
*/
#include <iostream>
#include <set>
#include <string>
#define NORMALEXIT 0
#define UNNORMALEXIT -10

/* displayusage() 显示使用方法
 * 参数：无
 */
void displayusage( void );

int main(int argc, char *argv[])
{
    /*
    如果argc!=3报错，例如programename -file dana则argc＝3。如果所输的第一个参数不在下面的集合中报错｛-file,-database,-standard,-http｝
    */
    // 注意 set 默认按字母排序
    std::set<std::string> argstr{"-database","-file","-help","-http","-standard"};
    if(argc<2||argc>3)
    {  
        /* 显示使用方法 */
	    std::cout << "参数个数不对，应该是两个或三个" << std::endl;
        displayusage();
        return UNNORMALEXIT;
    }  
    // do nothing
   // std::cout<<std::distance(argstr.begin(),argstr.find(argv[1]))<<std::endl;
    switch(std::distance(argstr.begin(),argstr.find(argv[1])))
    {
	    case 0: // -database
		    // do something
		    break; // 跳出 switch
	    case 1: // -file
	            break;
	    case 2: // -help
		    displayusage();
		    break;
	    case 3: // -http
		    break;
	    case 4 : // -standard
		    break;
	    default:
		    std::cout << "未知参数" << std::endl;
		    displayusage();
		    return UNNORMALEXIT;

   
    
    }
    std::cout << "正常退出" << std::endl;
    return NORMALEXIT;
}

void displayusage( void )
{   //endl是换行，std是标准库命名空间。
    std::cout << "用法：" << std::endl
              << "\tprogramename -file|database|standard|http value" << std::endl;
              //<< "示例：" << std::endl 
             // << "programename -file dana" << std::endl;
}
